import js from '@eslint/js';
import globals from 'globals';
import reactHooks from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';
import tseslint from 'typescript-eslint';
import prettier from 'eslint-plugin-prettier';
import eslintConfigPrettier from 'eslint-config-prettier';

export default tseslint.config(
  {
    ignores: [
      'dist/**',
      'node_modules/**',
      'public/**',
      '**/*.d.ts',
      '*.sh',
      '*.md',
      '*.woff',
      '*.ttf',
      '.vscode/**',
      '.idea/**',
    ],
  },
  {
    extends: [js.configs.recommended, ...tseslint.configs.recommended],
    files: ['**/*.{ts,tsx}'],
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser,
    },
    plugins: {
      'react-hooks': reactHooks,
      'react-refresh': reactRefresh,
      prettier: prettier,
    },
    rules: {
      ...reactHooks.configs.recommended.rules,
      'react-refresh/only-export-components': [
        'off',
        { allowConstantExport: true },
      ],
      // eslint (http://eslint.cn/docs/rules)
      'no-var': 'error', // 要求使用 let 或 const 而不是 var
      'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
      'no-use-before-define': 'off', // 禁止在 函数/类/变量 定义之前使用它们
      'prefer-const': 'off', // 此规则旨在标记使用 let 关键字声明但在初始分配后从未重新分配的变量，要求使用 const
      'no-irregular-whitespace': 'off', // 禁止不规则的空白

      // typeScript (https://typescript-eslint.io/rules)
      '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
      '@typescript-eslint/ban-types': 'off', // 禁止使用特定类型(可以使用Function等类型)
      '@typescript-eslint/no-namespace': 'off', //禁止使用自定义 TypeScript 模块和命名空间。
      // 添加 Prettier 规则
      'prettier/prettier': 'error', // 将 Prettier 错误作为 ESLint 错误报告
    },
  },

  // 添加 Prettier 配置，必须放在最后以禁用冲突规则
  eslintConfigPrettier,
);
